const BASE_URL = 'http://localhost:5000';  // 后端接口的根地址

// 封装 登录 请求
function my_login() {
    console.warn("login");
    return new Promise((resolve, reject) => {
        const app = getApp();
        wx.login({
            success: (res) => {
                console.warn(res);
                if (res.code) {
                    // 将 code 发送到后端获取 token
                    wx.request({
                        // 后端接口
                        url: BASE_URL + '/login',
                        method: 'POST',
                        data: {
                            code: res.code
                        },
                        success: (response) => {
                            console.warn(response);
                            if (response.data && response.data.token) {
                                // 保存登录后的数据到全局变量
                                app.globalData.userCode = res.code;
                                app.globalData.token = response.data.token;
                                var device_id = response.data.device_id;
                                if (device_id && device_id.trim()) {
                                    app.globalData.device_id = response.data.device_id;
                                    app.globalData.isBound = true;
                                } else {
                                    app.globalData.device_id = "";
                                    app.globalData.isBound = false;
                                }
                                console.warn(app.globalData)
                                // 返回登录成功的结果
                                resolve(response.data);
                            } else {
                                reject('服务器返回数据不完整');
                            }
                        },
                        fail: (error) => {
                            reject('请求失败: ' + error.errMsg);
                        }
                    });
                } else {
                    reject('登录失败！' + res.errMsg);
                }
            },
            fail: (error) => {
                reject('登录请求失败: ' + error.errMsg);
            }
        });
    });
}

// 封装 GET 请求
function my_get(url, data = {}, retry = 0) {
    return new Promise((resolve, reject) => {
        const app = getApp();
        if (!app.globalData.token) {
            my_login().then((res) => {
                my_get(url, data, 1).then((response) => {
                    resolve(response);
                })
                    .catch((error) => {
                        reject(error);
                    })
            })
                .catch((error) => {
                    console.error('登录失败:', error);
                });
        }
        wx.request({
            url: BASE_URL + url,
            method: 'GET',
            header: {
                'Authorization': app.globalData.token
            },
            data: data,
            success: (res) => {
                console.warn(res)
                if (res.statusCode === 200) {
                    resolve(res.data);
                } else if (res.statusCode === 401 && retry < 1) {
                    my_login().then((res) => {
                        my_get(url, data, 1).then((response) => {
                            resolve(response);
                        })
                            .catch((error) => {
                                reject(error);
                            })
                    })
                        .catch((error) => {
                            console.error('登录失败:', error);
                        });
                } else {
                    reject(res.data);
                }
            },
            fail: (error) => {
                reject(error);
            }
        });
    });
}

// 封装 POST 请求
function my_post(url, data = {}, retry = 0) {
    return new Promise((resolve, reject) => {
        const app = getApp();
        if (!app.globalData.token) {
            my_login().then((res) => {
                my_post(url, data, 1).then((response) => {
                    resolve(response);
                })
                    .catch((error) => {
                        reject(error);
                    })
            })
                .catch((error) => {
                    console.error('登录失败:', error);
                });
        }
        wx.request({
            url: BASE_URL + url,
            method: 'POST',
            data: data,
            header: {
                'Content-Type': 'application/json',
                'Authorization': app.globalData.token
            },
            success: (res) => {
                console.warn(res)
                if (res.statusCode === 200) {
                    resolve(res.data);
                } else if (res.statusCode === 401 && retry < 1) {
                    my_login().then((res) => {
                        my_post(url, data, 1).then((response) => {
                            resolve(response);
                        })
                            .catch((error) => {
                                reject(error);
                            })
                    })
                        .catch((error) => {
                            console.error('登录失败:', error);
                        });
                } else {
                    reject(res.data);
                }
            },
            fail: (error) => {
                reject(error);
            }
        });
    });
}

// 导出 API 方法
module.exports = {
    my_login,
    my_post,
    my_get
};
